/*
    洪水填充（FloodFill 算法）

    前置知识 : 讲解038-常见经典递归过程解析，其中的带路径的递归过程解析


    洪水填充是一种很简单的技巧，设置路径信息进行剪枝和统计，类似感染的过程

    路径信息不撤销，来保证每一片的感染过程可以得到区分

    看似是暴力递归过程，其实时间复杂度非常好，遍历次数和样本数量的规模一致

    ================================================

    题目1
    岛屿数量
    给你一个由 '1'（陆地）和 '0'（水）组成的的二维网格，请你计算网格中岛屿的数量
    岛屿总是被水包围，并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成
    此外，你可以假设该网格的四条边均被水包围
    测试链接 : https://leetcode.cn/problems/number-of-islands/


    ================================================

    题目2
    被围绕的区域
    给你一个 m x n 的矩阵 board ，由若干字符 'X' 和 'O' ，找到所有被 'X' 围绕的区域
    并将这些区域里所有的 'O' 用 'X' 填充。
    测试链接 : https://leetcode.cn/problems/surrounded-regions/

    ================================================

    题目3
    最大人工岛
    给你一个大小为 n * n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。
    返回执行此操作后，grid 中最大的岛屿面积是多少？
    岛屿 由一组上、下、左、右四个方向相连的 1 形成
    测试链接 : https://leetcode.cn/problems/making-a-large-island/

    ================================================

    题目3
    字典序最小的拓扑排序
    要求返回所有正确的拓扑排序中 字典序最小 的结果
    建图请使用链式前向星方式，因为比赛平台用其他建图方式会卡空间
    测试链接 : https://www.luogu.com.cn/problem/U107394

    注意：解决该问题需要使用小根堆，不熟悉的同学去看，讲解025-堆结构

    ================================================

    题目4
    打砖块
    有一个 m * n 的二元网格 grid ，其中 1 表示砖块，0 表示空白
    砖块 稳定（不会掉落）的前提是：
    一块砖直接连接到网格的顶部，或者
    至少有一块相邻（4 个方向之一）砖块 稳定 不会掉落时
    给你一个数组 hits ，这是需要依次消除砖块的位置
    每当消除 hits[i] = (rowi, coli) 位置上的砖块时，对应位置的砖块（若存在）会消失
    然后其他的砖块可能因为这一消除操作而 掉落
    一旦砖块掉落，它会 立即 从网格 grid 中消失（即，它不会落在其他稳定的砖块上）
    返回一个数组 result ，其中 result[i] 表示第 i 次消除操作对应掉落的砖块数目。
    注意，消除可能指向是没有砖块的空白位置，如果发生这种情况，则没有砖块掉落。
    测试链接 : https://leetcode.cn/problems/bricks-falling-when-hit/

    ================================================

    加餐练习：
    733. 图像渲染：https://leetcode.cn/problems/flood-fill/
    695. 岛屿的最大面积：https://leetcode.cn/problems/max-area-of-island/
    417. 太平洋大西洋水流问题：https://leetcode.cn/problems/pacific-atlantic-water-flow/
    529. 扫雷游戏：https://leetcode.cn/problems/minesweeper/
    LCR 130. 衣橱整理：https://leetcode.cn/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/

*/